package com.seewo.dubbo.debugger.admin.service;

import com.baomidou.mybatisplus.service.IService;
import com.seewo.dubbo.debugger.admin.entity.Method;
import com.seewo.dubbo.debugger.admin.mapper.MethodMapper;
import com.seewo.dubbo.debugger.admin.query.DebugQuery;
import com.seewo.dubbo.debugger.api.ApiDebuggerService;
import com.seewo.dubbo.debugger.api.Arg;
import com.seewo.dubbo.debugger.api.Result;

import java.util.List;

/**
 * <p>
 * method服务类
 * </p>
 *
 * @author chenliangliang
 * @since 2018-07-25
 */
public interface IMethodService extends IService<Method> {

    /**
     * 获取mapper
     *
     * @return methodMapper
     */
    MethodMapper getMapper();

    /**
     * 获取某个方法的具体api信息
     *
     * @param method 方法：interfaceId，methodName
     * @return api信息
     */
    Method getApi(Method method);

    /**
     * 获取dubbo debugger service
     *
     * @param serviceId 服务id
     * @param address   服务地址
     * @param protocol  协议
     * @return ApiDebuggerService
     */
    ApiDebuggerService getApiDebuggerService(Integer serviceId,  String address,  String protocol);

    /**
     * 接口方法在线调试
     *
     * @param debugQuery 封装的调试参数
     * @return 封装的调试结果
     */
    Result debug(DebugQuery debugQuery);


    /**
     * 接口方法在线调试
     *
     * @param methodId 要调试的方法id
     * @param args     调试参数
     * @return 封装的调试结果
     */
    Result debug(Integer methodId, List<Arg> args);


    /**
     * 更新描述
     * @param method
     */
    void updateDesc(Method method);
}
